#ifndef  APPLEJACKSCRIPT_HPP
# define APPLEJACKSCRIPT_HPP

# include "world.hpp"
# include "body.hpp"

namespace Shiny
{
  namespace Applejack
  {
    class Module
    {
    public:
      virtual ~Module() {}

      Module(World& w) : _world(w) {}

      virtual void Run(void) = 0;

    protected:
      World& _world;
    };

    class IA : public Module
    {
    public:
      virtual ~IA() {}

      typedef IA* (*factoryFunction)(World&, Body&);

      IA(World& w, Body& body) : Module(w), _body(body) {}

      virtual void Run(void) = 0;

    protected:
      Body& _body;
    };
  }
}

#endif